#pragma once
#include <boost/noncopyable.hpp>
#include "MapRenderer.hpp"
#include "BuildingRenderer.hpp"
#include "WorldPhysics.hpp"
#include "ImportExport.hpp"

namespace he
{
	class World;

	//! World renderer.
	class WorldRenderer : boost::noncopyable
	{
		// Attributes
	private:
		//! Scene manager.
		Ogre::SceneManager &m_SceneManager;
		//! World instance.
		World const &m_World;
		//! Map renderer.
		MapRenderer m_MapRenderer;
		//! Building renderer.
		BuildingRenderer m_BuildingRenderer;
		//! Global physics.
		he::WorldPhysics m_Physics;

		// Operations
	public:
		//! Get map renderer.
		HE_ENGINE_API MapRenderer &map_renderer();
		//! Update data before frame is rendered.
		HE_ENGINE_API void update(float Time);

		// Construction/Destruction
	public:
		HE_ENGINE_API WorldRenderer(Ogre::SceneManager &SceneManager, World const &World_);
	};
} /*he*/
